/**
 * 链表-删除节点-力扣136
 */

public class Practice_35 {
    public static void main(String[] args) {
        ListNode head = new ListNode();
        head.val = 2;

        ListNode second=new ListNode();
        second.val=3;
        head.next = second;


        ListNode third=new ListNode();
        third.val=4;
        head.next.next=third;

        ListNode list = deleteNode(head,2);

    }
    public static ListNode deleteNode(ListNode head, int val) {
        ListNode tmp=null;
        if(head.val==val){//头节点删除要特殊处理
            tmp=head;//不能让头节点丢失，先用tmp存起来,Java里可以不把头节点存起来，其他语言要单独释放头节点，就需要存头节点
            head=head.next;//让头节点后移一个位置
            return head;
        }else{
            ListNode pre=head;//pre做移动的指针，先从head开始
            while(pre.next!=null){//等于空的时候就是最后倒数第二个节点了（不需要再移动），最后一个节点是空。
                if(pre.next.val==val){//判断pre的下一个节点的值是否为要删除的值
                    tmp=pre.next.next;//如果是，就用临时变量把下下个节点存起来
                    pre.next=tmp;//pre直接连下下个节点
                }else{//如果没有找到要删除的值，就使用pre做位置移动
                    pre=pre.next;//往下移动一个节点
                }

            }
        }
        return head;
    }

    static class ListNode {
        private int val;
        private ListNode next;
    }
}
